home *** CD-ROM | disk | FTP | other *** search
/ Alles Voor Internet / Tout Pour Internet / alles voor internet.iso / MacInternet™ / Net / Utilities / Seer family 2.0 / seer_common / sc_seer_glue.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-08-29  |  3.1 KB  |  101 lines  |  [TEXT/KAHL]

  1. /*
  2.     sp_seer_glue.c - interface routine to the seer device
  3. */
  4. #include "sc.h"
  5. #include "sc_seer_globals.h"
  6. #include "sc_filter.h"
  7.  
  8. /*
  9.     do a seer control function
  10. */
  11. int seer_ctl(op,aarg)
  12. int op;                /*the function to do*/
  13. SR_record_pt aarg;    /*the seer control recor*/
  14. {SR_record_pt *arg_pt;
  15.  int err;
  16.  arg_pt=&aarg;
  17.  err=Control(gl.seer_refnum,op,arg_pt);
  18.  if(err!=noErr)
  19.   bomb(BOMB_sr_gnrl,err,(long)op);
  20.  return aarg->SR_error;
  21. }
  22.  
  23. #define sp_hq_size 10000    /*use x bytes for seer header queue*/
  24. #define sp_dq_size 20000    /*use x bytes for seer data queue*/
  25. void configure_seer()
  26. {SR_record srarg;            /*seer argument record*/
  27.  gl.sp_header_q=NewPtr(sp_hq_size);        /*allocate the header queue*/
  28.  gl.sp_data_q=NewPtr(sp_dq_size);            /*allocate the data queue*/
  29.  if((gl.sp_header_q==NIL)||
  30.      (gl.sp_data_q==NIL))
  31.   bomb(BOMB_sr_cnf,BMB_no_os,0L);
  32.  srarg.x.a_initq.dbufstart=gl.sp_data_q;     /*where the data queue lives*/
  33.  srarg.x.a_initq.dbuflen=sp_dq_size;    /*how big the data queue is*/
  34.  srarg.x.a_initq.hbufstart=gl.sp_header_q; /*where the header queue lives*/
  35.  srarg.x.a_initq.hbuflen=sp_hq_size;    /*how big the header queue is*/
  36.  srarg.x.a_initq.filter_proc=packet_filter; /*routine to filter packets*/
  37.  srarg.x.a_initq.filter_data=(Ptr)&my_filter;
  38.  if(seer_ctl(SRc_initq,&srarg)!=SRe_noErr)
  39.   bomb(BOMB_sr_cnf,BMB_no_os,srarg.SR_error);
  40. }
  41.  
  42.  
  43. void seer_clear()
  44. {SR_record srarg;            /*seer argument record*/
  45.  if(seer_ctl(SRc_clear_queue,&srarg)!=SRe_noErr)
  46.   bomb(BOMB_sr_on,BMB_no_os,srarg.SR_error);
  47. }
  48.  
  49. void seer_on()
  50. {SR_record srarg;            /*seer argument record*/
  51.  if(seer_ctl(SRc_on,&srarg)!=SRe_noErr)
  52.   bomb(BOMB_sr_on,BMB_no_os,srarg.SR_error);
  53. }
  54.  
  55.  
  56. /*preform the seer on function*/
  57. void load_seer()
  58. {SR_record srarg;            /*seer argument record*/
  59.  srarg.x.a_load.major_version=SEER_MAJOR;
  60.  if(seer_ctl(SRc_load,&srarg)!=SRe_noErr)
  61.   bomb(BOMB_sr_load,BMB_no_os,srarg.SR_error);
  62.  sp_status=srarg.x.a_load.status_pt;
  63. }
  64.  
  65. void seer_off()
  66. {SR_record srarg;            /*seer argument record*/
  67.  if(seer_ctl(SRc_off,&srarg)!=SRe_noErr)
  68.   bomb(BOMB_sr_on,BMB_no_os,srarg.SR_error);
  69. }
  70.  
  71. /*
  72.     close the seer device
  73. */
  74. void close_seer()
  75. {int err;
  76.  if(gl.seer_refnum==0)            /*already closed?*/
  77.   return;                    /*yes, nothing to do then*/
  78.  err=CloseDriver(gl.seer_refnum);    /*close the driver*/
  79.  if(err!=noErr)                /*an error?*/
  80.    if(gl.bomb_active<2)        /*no, ok to call bomb()?*/
  81.     bomb(BOMB_nodrvropen,BMB_no_os,err); /*yes, it isn't active now
  82.  gl.seer_refnum=0;                /*mark the device closed*/
  83. }
  84.  
  85. void open_seer()
  86. {SR_record srarg;            /*seer argument record*/
  87.  int old_res_file;
  88.  int err;
  89.  if(gl.seer_refnum!=0)            /*if already open nothing to do*/
  90.   return;
  91.  old_res_file=CurResFile();    /*remember so we can put current resource file back*/
  92.  gl.seer_res_file=OpenResFile("\pseer_drvr"); /*open the device driver resource file*/
  93.  if(gl.seer_res_file== -1)        /*find the resource file?*/
  94.     bomb(BOMB_nodrvrfile,ResError(),(long)0);    /*no, belly up*/
  95.  UseResFile(gl.seer_res_file);    /*may already be open, search it*/
  96.  err=OpenDriver("\p.seer",&gl.seer_refnum); /*open the driver*/
  97.  if(err!=noErr)                /*find the resource file?*/
  98.     bomb(BOMB_nodrvropen,err,(long)0); /*no, belly up*/
  99.  UseResFile(old_res_file);    /*go back to the normal resource file*/
  100. }
  101.